
Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', '/static/pdm/extjs/ux');
Ext.require([
	'Ext.grid.*',
	'Ext.data.*',
	'Ext.ux.grid.FiltersFeature',
	'Ext.panel.*'
]);
	Ext.onReady(function(){
	
	    /* donde se administra los permisos*/
		Ext.Ajax.request({
			url: '/usuario/rol/permiso',
			params : {
			solicitud_permisos : 'interfaz_usuario_bm'
			},
			scope : this,
				success : function(response){
				info = Ext.decode(response.responseText);
				//        Ext.Msg.alert(':D',info.permiso['crear']);
				if (info.success === false){
				  Ext.Msg.alert('ERROR','No se pudo optener los permisos');
				}else{
					if (info.permiso['eliminar']==0)
						Ext.getCmp('eliminar').hide();

					if (info.permiso['modificar']==0)
						Ext.getCmp('modificar').hide();
				}
			}
		}); /* fin de la funcion ajax que hace la peticion de los permisos*/
	
		Ext.define('User', {
		    extend: 'Ext.data.Model',
		    fields: [
						{name: 'user_id',  type: 'int'},
						{name: 'username',   type: 'string'},
						{name: 'name',   type: 'string'},
						{name: 'apellido',   type: 'string'},
						{name: 'email',   type: 'string'},
						{name: 'telefono',  type: 'int'},
						{name: 'vector',   type: 'int'},				
					]
		});
		var store = Ext.create('Ext.data.JsonStore', {
		    model: 'User',
		    proxy: {
		        type: 'ajax',
		        url: '/usuario/listar',
		        reader: {
		            type: 'json',
		            root: 'usuarios'
		        }
		    }
		});
		store.load();						


		/* configuraciones para realizar el filtrado por columna*/
	   	var local = true;
	 	var filters = {
			ftype: 'filters',
			local: local
    	};
    	
    	
		var grid = Ext.create('Ext.grid.Panel', {
		    width:642,
		    height:500,
		    features: [filters],
		    collapsible:false,
		    title:'Lista de Usuarios',
		    renderTo: 'acciones',
	//		closable:true,
		    store: store,
		    multiSelect: true,
		    viewConfig: {
		        emptyText: 'No images to display'
		    },

		    columns: [{
		            text: 'ID',
		            width: 40,
		            sortable: true,
		            filterable: true,
		            dataIndex: 'user_id'
		        },{
		            header: 'Usuario',
		            flex: 1,
		            sortable: true,
		            dataIndex: 'username',
		            filterable: true,
		            field: {
		                type: 'textfield'
		            }
		        },{
		            header: 'Nombre',
		            flex: 1,
		            sortable: true,
		            dataIndex: 'name',
		            filterable: true,
		            field: {
		                type: 'textfield'
		            }
		        },{
		            header: 'Apellido',
		            flex: 1,
		            sortable: true,
		            dataIndex: 'apellido',
		            filterable: true,
		            field: {
		                type: 'textfield'
		            }
		        },{
		            header: 'Email',
		            flex: 1,
		            sortable: true,		            
		            dataIndex: 'email',
		            filterable: true,
		            field: {
		                type: 'textfield'
		            }
		        },{
		            header: 'Telefono',
		            flex: 1,
		            sortable: true,
		            dataIndex: 'telefono',
		            filterable: true,
		            field: {
		                type: 'textfield'
		            }
		        },{
					header: 'vector',
					flex: 1,
					sortable: true,
					filterable: true,
					dataIndex: 'vector',
					field: {
						type: 'textfield'
					}
				}], 
		        
		        dockedItems: [{
		        xtype: 'toolbar',
		        items: [{
			        itemId: 'modificar',
			        id:'modificar',
		            text: 'Modificar',
		            disabled: true,
		            handler: function(){
		            var registro = grid.getView().getSelectionModel().getSelection()[0];
		            
		            var form_modificar = Ext.create('Ext.form.Panel', {
						frame:true,
						bodyStyle:'padding:5px 5px 0',
						width: 350,
						fieldDefaults: {
							msgTarget: 'side',
							labelWidth: 75
						},
						defaultType: 'textfield',
						defaults: {
							anchor: '100%'
						},

						items: [{
							fieldLabel: 'Usuario',
							name: 'username',
							value: registro.data['username'],
							allowBlank:false
						},{
							fieldLabel: 'Nombre',
							value: registro.data['name'],
							name: 'name'
						},{
							fieldLabel: 'Apellido',
							value: registro.data['apellido'],						
							name: 'apellido'
						}, {
							fieldLabel: 'Email',
							name: 'email',
							value: registro.data['email'],						
							vtype:'email'
						}, {
							xtype: 'numberfield',
							fieldLabel: 'Telefono',
							value: registro.data['telefono'],						
							name: 'telefono'
						}],

						buttons: [{
							text: 'Guardar',
							handler: function() {
								form_modificar.getForm().submit({
								url: "/usuario/modificar",
								params: {
									submit: "submit",
									user_id:registro.data['user_id']
								},
								method: "post",
								waitTitle:'Conectando', 
								waitMsg:'Enviando datos...',
								success: function() {							
									Ext.Msg.alert(":D", "El usuario fue modificado con exito");
									grid.store.load();
								},
								failure: function() {
									Ext.Msg.alert(":(", "No se pudo almacenar el usuario");
								}	
							})
							
							}
						},{
							text: 'Cancelar',
							handler: function() {
					            this.up('form').getForm().reset();
					            this.up('window').hide();
					        }
						
						}]
					});

					Ext.create('Ext.window.Window', {
						title: 'Modifica Usuario',
						plain:true,
						resizable: true,
			            modal: true,
						height: 200,
						width: 400,
						layout: 'fit',
						items: form_modificar,
					}).show();


		            }
		        }, '-', {
		            itemId: 'eliminar',
		            id:	'eliminar',
		            text: 'Eliminar',
		            disabled: true,
		            handler: function(){
		                var selection = grid.getView().getSelectionModel().getSelection()[0];
		                if (selection) {
		                  	var user_id = grid.getView().getSelectionModel().getSelection()[0].data['user_id'];	
		        
							Ext.Msg.confirm('Eliminar', 'Desea eliminar al usuario?', function(btn){
							
								if(btn == 'yes') {
								
									Ext.Ajax.request({
										url: '/usuario/eliminar',
										params: {
											user_id: user_id
										},
										success: function() {
											Ext.Msg.alert(':D', 'Ha eliminado al usuario', function(btn){
												grid.store.load();
											
											})
										},
										failure: function() {
											Ext.Msg.alert(':(', 'No se pudo eliminar el usuario')
										}
									})
								}											
							})   
	//                        store.remove(selection);
		                }
		            }
		        },'-',{
		        	itemId: 'asignar_rol',
		        	id:	'asignar_rol',
		            text: 'Asignar Rol',
		            disabled: true,
		            handler: function(){
/*#################### Funcion que Asigna un Rol a Usuario######################*/
		var selection1 = grid.getView().getSelectionModel().getSelection()[0];
		var user_id = grid.getView().getSelectionModel().getSelection()[0].data['user_id'];

		    if (selection1) {		 

				Ext.onReady(function(){					
					
					Ext.define('Rol', {
						extend: 'Ext.data.Model',
						fields: [
							{name: 'id_rol',  type: 'int'},
							{name: 'nombre_rol',   type: 'string'},
							{name: 'descripcion',   type: 'string'},				
						]
	
	
					});
					
					var store_rol = Ext.create('Ext.data.JsonStore', {
						model: 'Rol',

						proxy: {							
							type: 'ajax',
							url: '/usuario/rol/listar/asignados',
							actionMethods: {
					           read: 'POST'
					       },
					       extraParams: {
                 			   user_id: user_id
                			},
							
							reader: {
								type: 'json',
								root: 'rols'
							}							
						}
					});
					
					store_rol.load();

					var selModel = Ext.create('Ext.selection.CheckboxModel', {
						listeners: {
							selectionchange: function(sm, selections) {
								listView.down('#botonAsignar').setDisabled(selections.length == 0);
							}
						}
					});


					var listView = Ext.create('Ext.grid.Panel', {
						border: false,
						features: [filters],

						store: store_rol,						
							columns: [{
								text: 'ID',
								width: 40,
								sortable: true,
								filterable: true,								
								dataIndex: 'id_rol'
							},{
								header: 'Nombre',
								flex: 1,
								sortable: true,
								filterable: true,
								dataIndex: 'nombre_rol',
								field: {
									type: 'textfield'
								}
							},{
								header: 'Descripcion',
								flex: 1,
								sortable: true,
								filterable: true,
								dataIndex: 'descripcion',
								field: {
									type: 'textfield'
								}
							}],
							columnLines: true,
							selModel: selModel,
							dockedItems: [{
									xtype: 'toolbar',
									dock: 'bottom',
									ui: 'footer',
									layout: {
										pack: 'center'
									},
									items: [{
										minWidth: 80,
										text: 'Guardar',
							            itemId: 'botonAsignar',
										handler : function(){

			longitud=listView.getSelectionModel().getSelection().length;
			lista_roles = new Array();
			i=0;
									
			while(i < longitud)
			{											
//				lista_usuarios[i]=listView.getSelectionModel().getSelection()[i].data['user_id'];
				lista_roles.push(listView.getSelectionModel().getSelection()[i].data['id_rol']);
				i=i+1;
			}
		
			Ext.Ajax.request({
				url: '/usuario/rol/relacion/asignar',
				params: {
					user_id: user_id,
					lista_roles:Ext.encode(lista_roles)
				},
				success: function() {
					Ext.Msg.alert(':D', 'La relacion usuario rol se realizo con exito')

				},
				failure: function() {
					Ext.Msg.alert(':(', 'No se pudo realizar la relacion usuario rol')
				}
			}) /*fin funcion ajax*/
		}/* fin funcion Guardar*/
									},{
										minWidth: 80,
										text: 'Cancelar',
										handler: function() {
					         			   listView.up('window').hide();
					        			}
									}]
								}]
						
						
					});

				
		Ext.create('Ext.Window', {
		title: 'Lista de Roles',
		plain:true,
		resizable: true,
		modal: true,
		height: 300,
		width: 500,
		layout: 'fit',
		items: listView
		}).show();
					
				}); /*fin de la funcion que contiene toda la lista de usuarios*/



		    }/* fin del if que comprueba que se selecciono algo*/
	/*##############################################################################*/		            
		            
		            }
				},'-',{
		        	itemId: 'desasignar_rol',
		        	id:	'desasignar_rol',
		            text: 'Desasignar Rol',
		            disabled: true,
		            handler: function(){
/*#################### Funcion que Desasigna un Rol a Usuario######################*/
		var selection1 = grid.getView().getSelectionModel().getSelection()[0];
		var user_id = grid.getView().getSelectionModel().getSelection()[0].data['user_id'];
		    if (selection1) {		 

				Ext.onReady(function(){	
				
				Ext.define('Rol', {
						extend: 'Ext.data.Model',
						fields: [
							{name: 'id_rol',  type: 'int'},
							{name: 'nombre_rol',   type: 'string'},
							{name: 'descripcion',   type: 'string'},					
						]
	
	
					});
					
					var store_rol = Ext.create('Ext.data.JsonStore', {
						model: 'Rol',
						proxy: {							
							type: 'ajax',
							url: '/usuario/rol/listar/desasignados',
							actionMethods: {
					           read: 'POST'
					       },
					       extraParams: {
                 			   user_id: user_id
                			},
							
							reader: {
								type: 'json',
								root: 'rols'
							}							
						}
					});
					
					store_rol.load();				

					var selModel = Ext.create('Ext.selection.CheckboxModel', {
						listeners: {
							selectionchange: function(sm, selections) {
								listView.down('#botonDesasignar').setDisabled(selections.length == 0);
							}
						}
					});


					var listView = Ext.create('Ext.grid.Panel', {
						border: false,
						features: [filters],

						store: store_rol,						
							columns: [{
								text: 'ID',
								width: 40,
								sortable: true,
								filterable: true,
								dataIndex: 'id_rol'
							},{
								header: 'Nombre',
								flex: 1,
								sortable: true,
								filterable: true,
								dataIndex: 'nombre_rol',
								field: {
									type: 'textfield'
								}
							},{
								header: 'Descripcion',
								flex: 1,
								sortable: true,
								filterable: true,
								dataIndex: 'descripcion',
								field: {
									type: 'textfield'
								}
							}],
							columnLines: true,
							selModel: selModel,
							dockedItems: [{
									xtype: 'toolbar',
									dock: 'bottom',
									ui: 'footer',
									layout: {
										pack: 'center'
									},
									items: [{
										minWidth: 80,
										text: 'Guardar',
							            itemId: 'botonDesasignar',
										handler : function(){

			longitud=listView.getSelectionModel().getSelection().length;
			lista_roles = new Array();
			i=0;
									
			while(i < longitud)
			{											
//				lista_usuarios[i]=listView.getSelectionModel().getSelection()[i].data['user_id'];
				lista_roles.push(listView.getSelectionModel().getSelection()[i].data['id_rol']);
				i=i+1;
			}
		
			Ext.Ajax.request({
				url: '/usuario/rol/relacion/desasignar',
				params: {
					user_id: user_id,
					lista_roles:Ext.encode(lista_roles)
				},
				success: function() {
					Ext.Msg.alert(':D', 'Se desasigno correctamente el rol')

				},
				failure: function() {
					Ext.Msg.alert(':(', 'No se pudo desasignar el rol')
				}
			}) /*fin funcion ajax*/
		}/* fin funcion Guardar*/
									},{
										minWidth: 80,
										text: 'Cancelar',
										handler: function() {
					         			   listView.up('window').hide();
					        			}
									}]
								}]
						
						
					});

				
		Ext.create('Ext.Window', {
		title: 'Lista de Roles a desasignar',
		plain:true,
		resizable: true,
		modal: true,
		height: 300,
		width: 500,
		layout: 'fit',
		items: listView
		}).show();
					
				}); /*fin de la funcion que contiene toda la lista de roles*/



		    }/* fin del if que comprueba que se selecciono algo*/
	/*##############################################################################*/			            
		            
		            }
				}]
		    }],            
		        
		});
		
		grid.getSelectionModel().on('selectionchange', function(selModel, selections){
		    grid.down('#eliminar').setDisabled(selections.length === 0);
		    grid.down('#modificar').setDisabled(selections.length === 0);
		    grid.down('#asignar_rol').setDisabled(selections.length === 0);
			grid.down('#desasignar_rol').setDisabled(selections.length === 0);
		});

	});
					
